package com.erli.exchange.common.sg;

import java.util.ArrayList;
import java.util.List;

import com.erli.exchange.common.sg.config.BaseClassInfo;
import com.erli.exchange.common.sg.entity.FieldInfo;

/**
 * 
 * @Package com.erli.exchange.common.sg   
 * @ClassName:  ModelSourceGenerator   
 * @Description:Model生成
 * @Author: LeeHo
 * @Date:   2019年3月17日 下午10:29:05   
 *
 */
public class ModelSourceGenerator extends EntitySourceGenerater {

	@Override
	protected String getFileMainContent() {
		List<FieldInfo> fieldList = this.getFieldList(this.tableNameThreadLocal.get());
		StringBuilder content = new StringBuilder();
		for (FieldInfo item : fieldList) {
			content.append(TAB_NEW_LINE).append(NOTE).append(item.getComment()).append(TAB_NEW_LINE)
					.append(String.format(templateInfo.getModelApiModuleAnnotation(), item.getComment()))
					.append(TAB_NEW_LINE);
			this.importSet.addAll(this.getExtraImportByJavaType(content, item));
			content.append(String.format(templateInfo.getField(), item.getJavaType(), item.getPropertyName()))
					.append(TAB_NEW_LINE);
		}
		return content.toString();
	}

	@Override
	protected String getFileFirstLineContent() {
		String fileFirstLineTemplate = templateInfo.getFileStart();
		return String.format(fileFirstLineTemplate, baseInfo.getClassType(), this.getClassName(), "");
	}

	@Override
	protected BaseClassInfo getSelfClassInfo() {
		return modelClassInfo;
	}

	/**
	 * 
	 * @Title: getExtraImportByJavaType   
	 * @Description: TODO
	 * @Author: LeeHo
	 * @Date:   2019年3月17日 下午10:45:15      
	 * @param: @param content
	 * @param: @param item
	 * @param: @return      
	 * @return: List<String>  
	 * @throws
	 */
	private List<String> getExtraImportByJavaType(StringBuilder content, FieldInfo item) {
		List<String> result = new ArrayList<>();
		if (item.getJavaType().equals("LocalDateTime")) {
			result.add("import java.time.LocalDateTime;");
			result.add("import com.fasterxml.jackson.annotation.JsonFormat;");
			content.append(templateInfo.getModelJsonFormatAnnotation()).append(TAB_NEW_LINE);
		}
		return result;
	}

}
